home *** CD-ROM | disk | FTP | other *** search
- package sun.font;
-
- import java.awt.Font;
- import java.awt.font.FontRenderContext;
- import java.awt.geom.Point2D;
- import java.util.ArrayList;
-
- public final class GlyphLayout {
- private GVData _gvdata = new GVData();
- private static GlyphLayout cache;
- private LayoutEngineFactory _lef;
- private TextRecord _textRecord = new TextRecord();
- private ScriptRun _scriptRuns = new ScriptRun();
- private FontRunIterator _fontRuns = new FontRunIterator();
- private int _ercount;
- private ArrayList _erecords = new ArrayList(10);
- private Point2D.Float _pt = new Point2D.Float();
- private FontStrikeDesc _sd = new FontStrikeDesc();
- private float[] _mat = new float[4];
- private int _typo_flags;
- private int _offset;
-
- public static GlyphLayout get(LayoutEngineFactory var0) {
- if (var0 == null) {
- var0 = SunLayoutEngine.instance();
- }
-
- GlyphLayout var1 = null;
- synchronized(GlyphLayout.class) {
- if (cache != null) {
- var1 = cache;
- cache = null;
- }
- }
-
- if (var1 == null) {
- var1 = new GlyphLayout();
- }
-
- var1._lef = var0;
- return var1;
- }
-
- public static void done(GlyphLayout var0) {
- var0._lef = null;
- cache = var0;
- }
-
- public StandardGlyphVector layout(Font var1, FontRenderContext var2, char[] var3, int var4, int var5, int var6, StandardGlyphVector var7) {
- if (var3 != null && var4 >= 0 && var5 >= 0 && var5 <= var3.length - var4) {
- this.init(var5);
- if (var1.hasLayoutAttributes()) {
- AttributeValues var8 = ((AttributeMap)var1.getAttributes()).getValues();
- if (var8.getKerning() != 0) {
- this._typo_flags |= 1;
- }
-
- if (var8.getLigatures() != 0) {
- this._typo_flags |= 2;
- }
- }
-
- this._offset = var4;
- SDCache var21 = sun.font.GlyphLayout.SDCache.get(var1, var2);
- this._mat[0] = (float)var21.gtx.getScaleX();
- this._mat[1] = (float)var21.gtx.getShearY();
- this._mat[2] = (float)var21.gtx.getShearX();
- this._mat[3] = (float)var21.gtx.getScaleY();
- this._pt.setLocation(var21.delta);
- int var9 = var4 + var5;
- int var10 = 0;
- int var11 = var3.length;
- if (var6 != 0) {
- if ((var6 & 1) != 0) {
- this._typo_flags |= Integer.MIN_VALUE;
- }
-
- if ((var6 & 2) != 0) {
- var10 = var4;
- }
-
- if ((var6 & 4) != 0) {
- var11 = var9;
- }
- }
-
- byte var12 = -1;
- Font2D var13 = FontManager.getFont2D(var1);
- this._textRecord.init(var3, var4, var9, var10, var11);
- int var14 = var4;
- if (var13 instanceof CompositeFont) {
- this._scriptRuns.init(var3, var4, var5);
- this._fontRuns.init((CompositeFont)var13, var3, var4, var9);
-
- while(this._scriptRuns.next()) {
- int var15 = this._scriptRuns.getScriptLimit();
-
- int var19;
- for(int var16 = this._scriptRuns.getScriptCode(); this._fontRuns.next(var16, var15); var14 = var19) {
- PhysicalFont var17 = this._fontRuns.getFont();
- if (var17 instanceof NativeFont) {
- var17 = ((NativeFont)var17).getDelegateFont();
- }
-
- int var18 = this._fontRuns.getGlyphMask();
- var19 = this._fontRuns.getPos();
- this.nextEngineRecord(var14, var19, var16, var12, var17, var18);
- }
- }
- } else {
- this._scriptRuns.init(var3, var4, var5);
-
- while(this._scriptRuns.next()) {
- int var22 = this._scriptRuns.getScriptLimit();
- int var24 = this._scriptRuns.getScriptCode();
- this.nextEngineRecord(var14, var22, var24, var12, var13, 0);
- var14 = var22;
- }
- }
-
- int var23 = 0;
- int var25 = this._ercount;
- byte var26 = 1;
- if (this._typo_flags < 0) {
- var23 = var25 - 1;
- var25 = -1;
- var26 = -1;
- }
-
- for(this._sd = var21.sd; var23 != var25; var23 += var26) {
- EngineRecord var27 = (EngineRecord)this._erecords.get(var23);
-
- while(true) {
- try {
- var27.layout();
- } catch (IndexOutOfBoundsException var20) {
- this._gvdata.grow();
- continue;
- }
- }
- }
-
- StandardGlyphVector var28 = this._gvdata.createGlyphVector(var1, var2, var7);
- return var28;
- } else {
- throw new IllegalArgumentException();
- }
- }
-
- private GlyphLayout() {
- }
-
- private void init(int var1) {
- this._typo_flags = 0;
- this._ercount = 0;
- this._gvdata.init(var1);
- }
-
- private void nextEngineRecord(int var1, int var2, int var3, int var4, Font2D var5, int var6) {
- Object var7 = null;
- EngineRecord var8;
- if (this._ercount == this._erecords.size()) {
- var8 = new EngineRecord(this);
- this._erecords.add(var8);
- } else {
- var8 = (EngineRecord)this._erecords.get(this._ercount);
- }
-
- var8.init(var1, var2, var5, var3, var4, var6);
- ++this._ercount;
- }
-
- // $FF: synthetic method
- static TextRecord access$000(GlyphLayout var0) {
- return var0._textRecord;
- }
-
- // $FF: synthetic method
- static LayoutEngineFactory access$100(GlyphLayout var0) {
- return var0._lef;
- }
-
- // $FF: synthetic method
- static FontStrikeDesc access$200(GlyphLayout var0) {
- return var0._sd;
- }
-
- // $FF: synthetic method
- static float[] access$300(GlyphLayout var0) {
- return var0._mat;
- }
-
- // $FF: synthetic method
- static int access$400(GlyphLayout var0) {
- return var0._offset;
- }
-
- // $FF: synthetic method
- static int access$500(GlyphLayout var0) {
- return var0._typo_flags;
- }
-
- // $FF: synthetic method
- static Point2D.Float access$600(GlyphLayout var0) {
- return var0._pt;
- }
-
- // $FF: synthetic method
- static GVData access$700(GlyphLayout var0) {
- return var0._gvdata;
- }
- }
-